package com.xxjh.brs.ftp.service.impl;

import com.xxjh.brs.ftp.service.AbstractFtpService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.pool2.ObjectPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author CHENCHEN
 * @title 被拉去方服务器FTP提供方法
 * @company 新兴际华科技（天津）有限公司
 * @create 2024-07-03 19:21
 */
@Slf4j
@Component
@Scope("prototype")
public class FtpPullService extends AbstractFtpService {

    @Autowired
    @Qualifier("ftpClientPoolPull")
    private ObjectPool<FTPClient> ftpClientPoolPull;

    @Override
    protected ObjectPool<FTPClient> getFtpClientPool() {
        return ftpClientPoolPull;
    }

    /**
     * 通过FTP下载文件到本地。
     *
     * @param drictoryPath 指定根目录下的目录。
     * @param specifiedLayer 有值代表指定目录，无值检索全部。
     * @param existKey 已经完成任务检索的跳过。
     *
     */
    public void downloadPullFtp(String drictoryPath, String specifiedLayer, List<String> existKey){
        getFTPClient();
        downloadFtp(drictoryPath, specifiedLayer, existKey);
    }

    /**
     * 删除FTP服务器指定目录及其所有内容（包括子目录和文件）。
     *
     * @param directoryPath 要删除的目录的完整路径。
     * @return 如果目录及其内容成功删除则返回true，否则返回false。
     */
    public boolean deleteFtpDirectory(String directoryPath){
        getFTPClient();
        return deleteDirectoryRecursively(ftpParentPath + directoryPath);
    }
}
